home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / misc / gms_dev.lha / GMSDev / Source / Asm / Demos / BouncingBobs.s < prev    next >
Encoding:
Text File  |  1998-04-28  |  9.5 KB  |  415 lines

  1. ;-------T-------T------------------------T----------------------------------;
  2. ;This is a demonstration of bouncing bobs, an extension of the original
  3. ;Raining Bobs demo.  It runs in high-resolution + lace with a total of 35
  4. ;16x16 bobs at 50 FPS ('020+FAST).
  5.  
  6.     INCDIR    "INCLUDES:"
  7.     INCLUDE    "dpkernel/dpkernel.i"
  8.  
  9. MAX_IMAGES =    35
  10.  
  11.     SECTION    "Demo",CODE
  12.  
  13. ;===========================================================================;
  14. ;                             INITIALISE DEMO
  15. ;===========================================================================;
  16.  
  17.     STARTDPK
  18.  
  19. Start:    MOVEM.L    A0-A6/D1-D7,-(SP)
  20.     move.l    DPKBase(pc),a6    ;Load bob picture.
  21.     lea    PIC_BobTags(pc),a0
  22.     CALL    Init
  23.     tst.l    d0
  24.     beq    .Exit
  25.  
  26.     move.l    PIC_Bobs(pc),a1
  27.     move.l    a1,BallPic
  28.     move.l    a1,LacedPic
  29.  
  30.     move.l    PIC_Bitmap(a1),a2
  31.     move.l    BMP_Palette(a2),GSPalette
  32.  
  33.     moveq    #ID_RASTER,d0    ;Get raster object.
  34.     CALL    Get
  35.     move.l    d0,Raster
  36.     beq.s    .Exit
  37.  
  38.     move.l    Raster(pc),a0    ;a0 = Raster
  39.     lea    RastCList(pc),a1    ;a1 = Colourlist
  40.     move.l    a1,RAS_Command(a0)    ;a0 = Raster->Command = Colourlist;
  41.     move.l    a0,RSH_Prev(a1)    ;a1 = Colourlist->Prev = Raster;
  42.  
  43.     lea    ScreenTags(pc),a0    ;Initialise screen.
  44.     sub.l    a1,a1
  45.     CALL    Init
  46.     tst.l    d0
  47.     beq.s    .Exit
  48.  
  49. ;--------------------------------------------------------------------------;
  50. ;Initialise restore and bob objects.
  51.  
  52.     lea    RestoreTags(pc),a0
  53.     move.l    Screen(pc),a1    ;a1 = Screen.
  54.     CALL    Init    ;>> = Initialise the restore list.
  55.     tst.l    d0    ;d0 = Check for errors.
  56.     beq.s    .Exit    ;>> = Error, exit.
  57.  
  58.     lea    TAGS_Ball(pc),a0    ;Initialise the Ball mbob.
  59.     move.l    Screen(pc),a1
  60.     CALL    Init
  61.     tst.l    d0
  62.     beq.s    .Exit
  63.  
  64.     lea    TAGS_Interlaced(pc),a0    ;Initialise "HiRes Interlaced" bob.
  65.     move.l    Screen(pc),a1
  66.     CALL    Init
  67.     tst.l    d0
  68.     beq.s    .Exit
  69.  
  70. ;--------------------------------------------------------------------------;
  71. ;Initialise joydata object.
  72.  
  73.     moveq    #ID_JOYDATA,d0    ;Get joydata structure for reading
  74.     CALL    Get    ;port 0.
  75.     move.l    d0,JoyData
  76.     beq.s    .Exit
  77.     move.l    d0,a0    ;Initialise the joydata structure.
  78.     sub.l    a1,a1
  79.     CALL    Init
  80.     tst.l    d0
  81.     beq.s    .Exit
  82.  
  83.     move.l    Screen(pc),a0
  84.     CALL    Display
  85.  
  86.     bsr.s    Main
  87.  
  88. .Exit    move.l    DPKBase(pc),a6
  89.     move.l    JoyData(pc),a0
  90.     CALL    Free
  91.     move.l    BOB_Interlaced(pc),a0
  92.     CALL    Free
  93.     move.l    MBOB_Ball(pc),a0
  94.     CALL    Free
  95.     move.l    Restore(pc),a0
  96.     CALL    Free
  97.     move.l    Screen(pc),a0
  98.     CALL    Free
  99.     move.l    PIC_Bobs(pc),a0
  100.     CALL    Free
  101.     move.l    Raster(pc),a0
  102.     CALL    Free
  103.     MOVEM.L    (SP)+,A0-A6/D1-D7
  104.     moveq    #ERR_OK,d0
  105.     rts
  106.  
  107. ;===========================================================================;
  108. ;                                DEMO CODE
  109. ;===========================================================================;
  110.  
  111. Main:    move.l    Screen(pc),a2    ;a2 = Screen.
  112.     move.l    GS_Bitmap(a2),a3    ;a3 = Bitmap.
  113.  
  114.     move.l    BOB_Interlaced(pc),a1    ;a1 = Bob to draw.
  115.     move.w    GS_Width(a2),d0
  116.     sub.w    BOB_Width(a1),d0
  117.     move.w    d0,BOB_XCoord(a1)
  118.     clr.w    BOB_YCoord(a1)
  119.  
  120.     move.l    DPKBase(pc),a6    ;a6 = DPKBase.
  121.     move.l    GS_MemPtr2(a2),BMP_Data(a3)
  122.     move.l    BOB_Interlaced(pc),a0    ;a0 = Bob to draw.
  123.     CALL    Draw    ;>> = Draw the Bob
  124.  
  125.     move.l    GS_MemPtr1(a2),BMP_Data(a3)
  126.     move.l    BOB_Interlaced(pc),a0    ;a0 = Bob to draw.
  127.     CALL    Draw    ;>> = Draw the Bob
  128.  
  129.     moveq    #$00,d7
  130.     move.l    MBOB_Ball(pc),a1
  131.     move.l    MB_EntryList(a1),a2    ;a2 = First entry.
  132.     move.w    MB_AmtEntries(a1),d2    ;a2 = Amount of entries.
  133.     subq.w    #1,d2    ;d2 = --1 for loop.
  134.     moveq    #$00,d3
  135.  
  136. .create    eor.w    #1,d3
  137.     moveq    #8,d1    ;Set Y speed here.
  138.     CALL    FastRandom
  139.     addq.w    #2,d0
  140.     move.w    d0,BE_YSpeed(a2)
  141.     move.w    #8,d1    ;Set X speed here.
  142.     CALL    FastRandom
  143.     addq.w    #1,d0
  144.     move.w    d0,BE_XSpeed(a2)
  145.     tst.w    d3
  146.     beq.s    .posx
  147.     neg.w    BE_XSpeed(a2)
  148.  
  149. .posx    move.l    Screen(pc),a0
  150.     move.w    GS_Height(a0),d1    ;Starting Y coordinate.
  151.     asr.w    #1,d1
  152.     CALL    FastRandom
  153.     asr.w    #1,d1
  154.     add.w    d1,d0
  155.     move.w    d0,BE_YCoord(a2)
  156.  
  157.     move.w    GS_Width(a0),d1    ;Starting X coordinate.
  158.     CALL    FastRandom
  159.     move.w    d0,BE_XCoord(a2)
  160.  
  161.     moveq    #12,d1
  162.     CALL    FastRandom
  163.     move.w    d0,BE_Frame(a2)
  164.     move.b    .Sets(pc,d0.w),BE_Set+1(a2)
  165.     move.w    #1,BE_FChange(a2)
  166.     move.w    d3,BE_Locked(a2)
  167.  
  168.     lea    NBE_SIZEOF(a2),a2
  169.     dbra    d2,.create
  170.     bra.s    Loop
  171.  
  172. .Sets    dc.b    0,0,0,0
  173.     dc.b    1,1,1,1
  174.     dc.b    2,2,2,2
  175.  
  176. ;---------------------------------------------------------------------------;
  177.  
  178. Loop:    move.l    Screen(pc),a0    ;a0 = Screen.
  179.     move.l    MBOB_Ball(pc),a1
  180.     addq.w    #1,d7
  181.     move.l    MB_EntryList(a1),a2    ;a2 = First entry.
  182.     move.w    MB_AmtEntries(a1),d2
  183.     subq.w    #1,d2
  184. .update    bsr.s    UpdateBob
  185.     lea    NBE_SIZEOF(a2),a2
  186.     dbra    d2,.update
  187.  
  188.     move.l    DPKBase(pc),a6
  189.     move.l    Restore(pc),a0
  190.     CALL    Activate
  191.  
  192.     move.l    MBOB_Ball(pc),a0    ;a0 = Bob to draw.
  193.     CALL    Draw    ;>> = Draw the Bob.
  194.  
  195.     move.l    SCRBase(pc),a6
  196.     CALL    scrWaitAVBL
  197.  
  198.     move.l    Screen(pc),a0
  199.     CALL    scrSwapBuffers
  200.  
  201.     move.l    DPKBase(pc),a6
  202.     move.l    JoyData(pc),a0
  203.     CALL    Query
  204.     move.l    JoyData(pc),a0
  205.     move.l    JD_Buttons(a0),d0
  206.     btst    #JB_LMB,d0
  207.     beq.s    Loop
  208.     rts
  209.  
  210. ;===========================================================================;
  211. ;                               UPDATE A BOB
  212. ;===========================================================================;
  213. ;Function: Moves the entity according to its internal settings.
  214. ;Requires: a1 = Bob structure.
  215. ;       a2 = Entry to update.
  216.  
  217. GRAVITY =    1
  218.  
  219. UpdateBob:
  220.     move.l    MB_DestBitmap(a1),a0    ;a0 = Bitmap
  221.     move.w    BE_YCoord(a2),d0    ;d0 = YCoord
  222.     add.w    BE_YSpeed(a2),d0    ;d0 = (YCoord)+YSpeed
  223.     cmp.w    BMP_Height(a0),d0    ;d0 = Should this bob bounce?
  224.     blt.s    .NoBounce    ;>> = No.
  225.     neg.w    BE_YSpeed(a2)    ;a2 = Bounce the bob!
  226.     addq.w    #GRAVITY,BE_YSpeed(a2)    ;a2 = Gravity pushes the bob down.
  227.     bra.s    .CheckX
  228. .NoBounce
  229.     move.w    d0,BE_YCoord(a2)    ;d0 = Save the change.
  230.     addq.w    #GRAVITY,BE_YSpeed(a2)    ;a2 = Gravity pushes the bob down.
  231.  
  232. .CheckX    move.w    BE_XCoord(a2),d0
  233.     add.w    BE_XSpeed(a2),d0
  234.     cmp.w    BMP_Width(a0),d0
  235.     bcs.s    .NoXBounce
  236.     neg.w    BE_XSpeed(a2)
  237.     bra.s    .Animate
  238. .NoXBounce
  239.     move.w    d0,BE_XCoord(a2)
  240.  
  241. ;---------------------------------------------------------------------------;
  242.  
  243. .Animate
  244.     tst.w    BE_Locked(a2)
  245.     beq.s    .exit
  246.     move.w    d7,d6
  247.     and.w    #%00000011,d6
  248.     bne.s    .exit
  249.     move.w    BE_FChange(a2),d1
  250.     bgt.s    .Positive
  251.  
  252. .Negative
  253.     cmp.w    #1,BE_Set(a2)
  254.     bgt.s    .NBlue
  255.     beq.s    .NGreen
  256. .NRed    add.w    d1,BE_Frame(a2)
  257.     tst    BE_Frame(a2)
  258.     bge.s    .exit
  259.     move.w    #1,BE_FChange(a2)
  260.     clr.w    BE_Frame(a2)
  261.     rts
  262. .NGreen    add.w    d1,BE_Frame(a2)
  263.     cmp.w    #4,BE_Frame(a2)
  264.     bge.s    .done
  265.     move.w    #1,BE_FChange(a2)
  266.     move.w    #4,BE_Frame(a2)
  267.     rts
  268. .NBlue    add.w    d1,BE_Frame(a2)
  269.     cmp.w    #8,BE_Frame(a2)
  270.     bge.s    .done
  271.     move.w    #1,BE_FChange(a2)
  272.     move.w    #8,BE_Frame(a2)
  273. .exit    rts
  274.  
  275. .Positive
  276.     cmp.w    #1,BE_Set(a2)
  277.     bgt.s    .PBlue
  278.     beq.s    .PGreen
  279. .PRed    add.w    d1,BE_Frame(a2)
  280.     cmp.w    #3,BE_Frame(a2)
  281.     ble.s    .done
  282.     move.w    #-1,BE_FChange(a2)
  283.     move.w    #2,BE_Frame(a2)
  284.     rts
  285. .PGreen    add.w    d1,BE_Frame(a2)
  286.     cmp.w    #7,BE_Frame(a2)
  287.     ble.s    .done
  288.     move.w    #-1,BE_FChange(a2)
  289.     move.w    #6,BE_Frame(a2)
  290.     rts
  291. .PBlue    add.w    d1,BE_Frame(a2)
  292.     cmp.w    #11,BE_Frame(a2)
  293.     ble.s    .done
  294.     move.w    #-1,BE_FChange(a2)
  295.     move.w    #10,BE_Frame(a2)
  296. .done    rts
  297.  
  298. ;===========================================================================;
  299. ;                                  DATA
  300. ;===========================================================================;
  301.  
  302.     STRUCTURE    NBE,BE_SIZEOF    ;Definition for the mutated Entry-
  303.     WORD    BE_XSpeed    ;list in the Ball bob.
  304.     WORD    BE_YSpeed
  305.     WORD    BE_Set    ;0 = Red, 1 = Green, 2 = Blue.
  306.     WORD    BE_FChange
  307.     WORD    BE_Locked
  308.     LABEL    NBE_SIZEOF
  309.  
  310. JoyData:    dc.l  0
  311.  
  312. ;---------------------------------------------------------------------------;
  313.  
  314. RestoreTags:    dc.l  TAGS_RESTORE
  315. Restore:    dc.l  0
  316.         dc.l  RSA_Entries,MAX_IMAGES
  317.         dc.l  TAGEND
  318.  
  319. ;---------------------------------------------------------------------------;
  320.  
  321. ScreenTags:    dc.l  TAGS_SCREEN
  322. Screen:        dc.l  0
  323.         dc.l  GSA_Raster
  324. Raster:        dc.l  0
  325.         dc.l  GSA_Width,640
  326.         dc.l  GSA_Height,512
  327.         dc.l  GSA_Attrib,SCR_DBLBUFFER
  328.         dc.l  GSA_ScrMode,SM_HIRES|SM_LACED
  329.         dc.l    GSA_BitmapTags,0
  330.         dc.l    BMA_Palette
  331. GSPalette:    dc.l    0
  332.         dc.l    TAGEND,0
  333.         dc.l  TAGEND
  334.  
  335. RastCList:    dc.w  ID_RASTCOLOURLIST,1
  336.         dc.l  0,0,0
  337.         dc.w  300,30    ;YCoord, Skip
  338.         dc.l  0    ;Colour
  339.         dc.l  .colours    ;Values
  340.  
  341. .colours    dc.l  $100000,$200000,$300000,$400000,$500000,$600000,$700000
  342.         dc.l  -1
  343.  
  344. ;---------------------------------------------------------------------------;
  345.  
  346. TAGS_Ball:    dc.l  TAGS_MBOB
  347. MBOB_Ball:    dc.l  0
  348.         dc.l  MBA_AmtEntries,MAX_IMAGES
  349.         dc.l  MBA_GfxCoords,BallFrames
  350.         dc.l  MBA_Width,16
  351.         dc.l  MBA_Height,16
  352.         dc.l  MBA_EntryList,Images
  353.         dc.l  MBA_Attrib,BBF_GENMASKS|BBF_CLRNOMASK|BBF_CLEAR|BBF_CLIP
  354.         dc.l  MBA_Source
  355. BallPic:    dc.l  0
  356.         dc.l  MBA_EntrySize,NBE_SIZEOF
  357.         dc.l  TAGEND
  358.  
  359. BallFrames:    dc.w  00,16*0    ;RED
  360.         dc.w  00,16*1
  361.         dc.w  00,16*2
  362.         dc.w  00,16*3
  363.         dc.w  16,16*0    ;GREEN
  364.         dc.w  16,16*1
  365.         dc.w  16,16*2
  366.         dc.w  16,16*3
  367.         dc.w  32,16*0    ;BLUE
  368.         dc.w  32,16*1
  369.         dc.w  32,16*2
  370.         dc.w  32,16*3
  371.         dc.l  -1
  372.  
  373. ;---------------------------------------------------------------------------;
  374.  
  375. PIC_BobTags:    dc.l  TAGS_PICTURE
  376. PIC_Bobs:    dc.l  0
  377.         dc.l    PCA_BitmapTags,0
  378.         dc.l    BMA_MemType,MEM_VIDEO
  379.         dc.l    TAGEND,0
  380.         dc.l  PCA_Source,.file
  381.         dc.l  TAGEND
  382.  
  383. .file        FILENAME "GMS:demos/data/PIC.HRPulse"
  384.  
  385. ;---------------------------------------------------------------------------;
  386.  
  387. TAGS_Interlaced    dc.l  TAGS_BOB
  388. BOB_Interlaced:    dc.l  0
  389.         dc.l  BBA_GfxCoords,LacedFrames
  390.         dc.l  BBA_Width,96
  391.         dc.l  BBA_Height,7
  392.         dc.l  BBA_Attrib,BBF_GENMASKS
  393.         dc.l  BBA_Source
  394. LacedPic:    dc.l  0
  395.         dc.l  TAGEND
  396.  
  397. LacedFrames:    dc.w  0,16*4    ;X/Y Graphic
  398.         dc.l  -1
  399.  
  400. ;---------------------------------------------------------------------------;
  401.  
  402.     SECTION    Images,BSS
  403.  
  404. Images    ds.b    NBE_SIZEOF*MAX_IMAGES    ;X/Y/Frame/Speed/Set/FChange/Locked
  405.  
  406. ;===========================================================================;
  407.  
  408. ProgName:    dc.b  "Bouncing Bobs",0
  409. ProgAuthor:    dc.b  "Paul Manias",0
  410. ProgDate:    dc.b  "January 1998",0
  411. ProgCopyright:    dc.b  "DreamWorld Productions (c) 1996-1998.  Freely distributable.",0
  412. ProgShort:    dc.b  "Multiple bob demonstration.",0
  413.         even
  414.  
  415.